#pragma once

template<class Iterator, class Ref, class Ptr>
struct ReverseIterator
{
	typedef ReverseIterator<Iterator, Ref, Ptr> self;
	ReverseIterator(Iterator it)
		:_it(it)
	{}
	Ref operator*()
	{
		Iterator cur = _it;
		return *(--cur);
	}
	self operator++()
	{
		--_it;
		return *this;
	}
	bool operator!=(const self& s)
	{
		return _it != s._it;
	}
	Iterator _it;
};